export type V = [number, number, number];

/**
 * 罗德里格旋转公式
 * @param t 旋转向量
 * @param k 旋转轴
 * @param r 旋转角度
 */
function rodrigo(t: V, k: V, r: number) {
    const [u, v, w] = t;
    const [x, y, z] = k;
    const sin = Math.sin(r);
    const cos = Math.cos(r);
    const m = (x * u + y * v + z * w) * (1 - cos);
    const result: V = [
        u * cos + (y * w - z * v) * sin + x * m,
        v * cos + (z * u - x * w) * sin + y * m,
        w * cos + (x * v - y * u) * sin + z * m,
    ];
    return result;
}

export default rodrigo;
